package main

//结构体

import "fmt"

func main() {

	// 声明 并赋值  一个结构体  法一
	var p1 Person

	fmt.Println(p1)   //{ 0  }  string类型的值 是空字符串

	p1.name="张帮龙"
	p1.age=30
	p1.sex="男"
	p1.address="访问是否是否"
	fmt.Println(p1)   //{ 0  }


	// 声明 并赋值  一个结构体  法二
	p2:=Person{}

	fmt.Println(p2)   //{ 0  }  string类型的值 是空字符串
	p2.name="张帮龙"
	p2.age=30
	p2.sex="男"
	p2.address="访问是否是否"
	fmt.Println(p2)   //{张帮龙 30 男 访问是否是否}

	//方法三  创建 并赋值
	p3:=Person{name:"zhangbanglong",age:12,sex:"男",address:"对方水电费"}
	fmt.Println(p3)   // {zhangbanglong 12 男 对方水电费}
	fmt.Println(p3)   // {zhangbanglong 12 男 对方水电费}

	// 定义 一个 结构体 指针
   var pp1 *Person
	pp1=&p1
	fmt.Printf("地址=%p,数据类型=%T\n",pp1,pp1)   //地址=0xc00001a080,数据类型=*main.Person

    fmt.Println((*pp1).name)   //张帮龙
	fmt.Println((*pp1).age)    ///30


	//使用 new()函数 创建 结构体  new返回的是 指向 结构体的指针

	p4 :=new(Person)
	p4.name="test"
	p4.address="dfddsfs"
	p4.sex="男"
	p4.age=45

	fmt.Println(p4)   //&{test 45 男 dfddsfs}


}

//定义结构体

type Person struct {
	name string
	age int
	sex string
	address string
}